home *** CD-ROM | disk | FTP | other *** search
- #ifndef _DYNAMIC_PRINTK_H
- #define _DYNAMIC_PRINTK_H
-
- #define DYNAMIC_DEBUG_HASH_BITS 6
- #define DEBUG_HASH_TABLE_SIZE (1 << DYNAMIC_DEBUG_HASH_BITS)
-
- #define TYPE_BOOLEAN 1
-
- #define DYNAMIC_ENABLED_ALL 0
- #define DYNAMIC_ENABLED_NONE 1
- #define DYNAMIC_ENABLED_SOME 2
-
- extern int dynamic_enabled;
-
- /* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which
- * bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They
- * use independent hash functions, to reduce the chance of false positives.
- */
- extern long long dynamic_printk_enabled;
- extern long long dynamic_printk_enabled2;
-
- struct mod_debug {
- char *modname;
- char *logical_modname;
- char *flag_names;
- int type;
- int hash;
- int hash2;
- } __attribute__((aligned(8)));
-
- int register_dynamic_debug_module(char *mod_name, int type, char *share_name,
- char *flags, int hash, int hash2);
-
- #if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
- extern int unregister_dynamic_debug_module(char *mod_name);
- extern int __dynamic_dbg_enabled_helper(char *modname, int type,
- int value, int hash);
-
- #define __dynamic_dbg_enabled(module, type, value, level, hash) ({ \
- int __ret = 0; \
- if (unlikely((dynamic_printk_enabled & (1LL << DEBUG_HASH)) && \
- (dynamic_printk_enabled2 & (1LL << DEBUG_HASH2)))) \
- __ret = __dynamic_dbg_enabled_helper(module, type, \
- value, hash);\
- __ret; })
-
- #define dynamic_pr_debug(fmt, ...) do { \
- static char mod_name[] \
- __attribute__((section("__verbose_strings"))) \
- = KBUILD_MODNAME; \
- static struct mod_debug descriptor \
- __used \
- __attribute__((section("__verbose"), aligned(8))) = \
- { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
- if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN, \
- 0, 0, DEBUG_HASH)) \
- printk(KERN_DEBUG KBUILD_MODNAME ":" fmt, \
- ##__VA_ARGS__); \
- } while (0)
-
- #define dynamic_dev_dbg(dev, format, ...) do { \
- static char mod_name[] \
- __attribute__((section("__verbose_strings"))) \
- = KBUILD_MODNAME; \
- static struct mod_debug descriptor \
- __used \
- __attribute__((section("__verbose"), aligned(8))) = \
- { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
- if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN, \
- 0, 0, DEBUG_HASH)) \
- dev_printk(KERN_DEBUG, dev, \
- KBUILD_MODNAME ": " format, \
- ##__VA_ARGS__); \
- } while (0)
-
- #else
-
- static inline int unregister_dynamic_debug_module(const char *mod_name)
- {
- return 0;
- }
- static inline int __dynamic_dbg_enabled_helper(char *modname, int type,
- int value, int hash)
- {
- return 0;
- }
-
- #define __dynamic_dbg_enabled(module, type, value, level, hash) ({ 0; })
- #define dynamic_pr_debug(fmt, ...) do { } while (0)
- #define dynamic_dev_dbg(dev, format, ...) do { } while (0)
- #endif
-
- #endif
-